package com.example.lcode.greedy;

/**
 * 402. 移掉 K 位数字
 * 给你一个以字符串表示的非负整数 num 和一个整数 k ，移除这个数中的 k 位数字，使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
 *
 *
 * 示例 1 ：
 *
 * 输入：num = "1432219", k = 3
 * 输出："1219"
 * 解释：移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。
 * 示例 2 ：
 *
 * 输入：num = "10200", k = 1
 * 输出："200"
 * 解释：移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
 * 示例 3 ：
 *
 * 输入：num = "10", k = 2
 * 输出："0"
 * 解释：从原数字移除所有的数字，剩余为空就是 0 。
 */
public class Question402 {

    public String removeKdigits(String num, int k) {
        if (num.length() <= k) {
            return "0";
        }
        StringBuilder str = new StringBuilder(String.valueOf(num.charAt(0)));
        for (int i = 1; i < num.length(); i++) {
            int number = Integer.valueOf(String.valueOf(num.charAt(i)));
            while (k !=0 && str.length() != 0 && number < Integer.valueOf(String.valueOf(str.charAt(str.length() - 1)))) {
                str.deleteCharAt(str.length() - 1);
                k--;
            }
            str.append(num.charAt(i));
        }
        for (int i = 0; i < str.length(); i++) {
            if (Integer.valueOf(String.valueOf(str.charAt(i))) == 0) {
                str.deleteCharAt(i);
                i--;
            } else {
                break;
            }
        }
        return str.length() <= k || str.length() == 0 ? "0" : (k > 0 ? str.substring(0, str.length() - k) : str.toString());
    }

    public static void main(String[] args) {
        Question402 question402 = new Question402();
        String s = question402.removeKdigits("12", 1);
        System.out.println(s);
    }

}
